package com.canoe;

import com.canoe.common.CanoeException;
import com.canoe.common.FirstLevelOrder;

import java.util.Objects;

/**
 * 抽象一级指令执行器
 *
 * @author: btm
 * @time: 21:46 2020/9/22
 **/
public abstract class AbstractFirstLevelOrderProcessor{

    /**
     * 一级指令抽象执行器
     * @param args 一级指令参数
     */
    public void process(String... args) {
        if (Objects.isNull(args) || args.length <= 0) {
            throw new CanoeException("Process first order need parameter");
        }
        this.doProcess(args);
    }

    /**
     * 返回当前处理器支持的一级指令
     * @return 支持的一级指令
     */
    protected abstract FirstLevelOrder support();

    /**
     * 对应的一级指令处理实现
     * @param args 一级指令的参数，不包含一级指令本身
     */
    protected abstract void doProcess(String... args);
}
